package com.hucsmn.xcopy;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * 作业题三：
 * 使用线程池将一个目录中的所有内容拷贝到另外一个目录中，包含子目录中的内容。
 */
class MultiThreadCopyTest {
    public static void main(String[] args) {
        if (args.length == 2) {
            copy(null, args[0], args[1]);
        } else if (args.length != 0) {
            System.err.println("请指定两个参数。");
            System.exit(1);
        }

        Scanner sc = new Scanner(System.in);
        MultiThreadCopy mtc = null;
        while(true) {
            System.out.print("源目录：");
            String src = sc.nextLine().trim();
            System.out.print("目标目录：");
            String dst = sc.nextLine().trim();

            mtc = copy(mtc, src, dst);
        }
    }

    /**
     * 文件复制程序，可以复用线程池。
     *
     * @param mtc 需要复用的文件复制线程池。
     * @param src 源文件或文件夹位置。
     * @param dst 目标文件或文件夹位置。
     * @return 需要复用的文件复制线程池。
     */
    private static MultiThreadCopy copy(MultiThreadCopy mtc, String src, String dst) {
        File srcFile = new File(src);
        File dstFile = new File(dst);
        try {
            if (mtc == null) {
                mtc = new MultiThreadCopy(srcFile, dstFile);
            } else {
                mtc.setSrc(srcFile);
                mtc.setDst(dstFile);
            }

            System.out.println("正在复制...");
            mtc.start();
            return mtc;
        } catch (IOException e) {
            System.err.println("错误：" + e);
            return mtc;
        } finally {
            System.out.println();
        }
    }
}
